package com.winchain.chainbill.bill.biz.discount.service.impl;

import com.shell.bee.base.utils.StringUtil;
import com.shell.bee.base.utils.SystemUtil;
import com.shell.bee.entity.auth.AuthOrgan;
import com.shell.bee.persistence.annotation.Pagination;
import com.shell.bee.persistence.model.PageLimit;
import com.shell.framework.utils.CommonDataUtil;
import com.shell.framework.utils.SysDateUtil;
import com.winchain.chainbill.bill.base.po.CbDctQt;
import com.winchain.chainbill.bill.base.service.CbDctQtService;
import com.winchain.chainbill.bill.biz.discount.service.BillDctQtService;
import java.math.BigDecimal;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("billDctQtService")
public class BillDctQtServiceImpl implements BillDctQtService {
	@Autowired
	private CbDctQtService cbDctQtService;

	@Pagination
	public List<CbDctQt> selectDctQtList(PageLimit limit, CbDctQt cbDctQt) {
		String finNm = cbDctQt.getFinNm();
		if (!StringUtil.emptyAndNull(finNm)) {
			cbDctQt.setFinNm(StringUtil.getParameterLike(finNm));
		}
		return this.cbDctQtService.selectDctQtList(cbDctQt);
	}

	public String saveDctQt(List<CbDctQt> dctQtList) {
		String msg = checkSave(dctQtList);
		if (msg != null) {
			return msg;
		}
		AuthOrgan organ = CommonDataUtil.getCurEnt();
		for (CbDctQt dctQt : dctQtList) {
			initDctQt(dctQt, organ);
			this.cbDctQtService.save(dctQt);
		}
		return msg;
	}

	public String updateDctQt(CbDctQt dctQt) {
		String msg = checkUpdate(dctQt);
		if (msg != null) {
			return msg;
		}
		this.cbDctQtService.updateNotNull(dctQt);
		return msg;
	}

	public CbDctQt selectValidQt(String grpId, String finId) {
		return this.cbDctQtService.selectValidQt(grpId, finId);
	}

	public List<String> selectFinIdsByGrpId(String grpId) {
		return this.cbDctQtService.selectFinIdsByGrpId(grpId);
	}

	@Pagination
	public List<CbDctQt> selectFinDctQtList(PageLimit limit, CbDctQt dctQt) {
		dctQt.setFinId(CommonDataUtil.getCurEntId());
		return this.cbDctQtService.selectFinDctQtList(dctQt);
	}

	private String checkUpdate(CbDctQt dctQt) {
		String msg = null;
		if (StringUtil.emptyAndNull(dctQt.getQtId())) {
			msg = "��������id����";
		}
		if (("1".equals(dctQt.getFinType())) && (dctQt.getQtAmt() == null)) {
			msg = "����������������������";
		}
		if (!StringUtil.emptyAndNull(dctQt.getExpDate())) {
			String systemDate = SysDateUtil.getSystemDate();
			if (systemDate.compareTo(dctQt.getExpDate()) > 0) {
				msg = "��������������������������������";
			}
		}
		return msg;
	}

	private CbDctQt initDctQt(CbDctQt dctQt, AuthOrgan organ) {
		dctQt.setQtId(SystemUtil.getUUID());
		dctQt.setSetId(organ.getOrganId());
		dctQt.setSetNm(organ.getOrganName());
		dctQt.setQtBlk(BigDecimal.ZERO);
		dctQt.setQtUsed(BigDecimal.ZERO);
		dctQt.setQtState("0");
		dctQt.setCreateTime(SysDateUtil.getSystemDateTime());
		return dctQt;
	}

	private String checkSave(List<CbDctQt> dctQtList) {
		String msg = null;
		if ((dctQtList == null) || (dctQtList.size() == 0)) {
			return "��������";
		}
		StringBuilder msgBuilder = new StringBuilder();
		CbDctQt dctQt = null;
		for (int i = 1; i <= dctQtList.size(); i++) {
			dctQt = (CbDctQt) dctQtList.get(0);
			if (StringUtil.emptyAndNull(dctQt.getGrpId())) {
				msgBuilder.append("��").append(i).append("������������id����");
			}
			if (StringUtil.emptyAndNull(dctQt.getFinId())) {
				msgBuilder.append("��").append(i).append("��������������id����");
			}
			if (StringUtil.emptyAndNull(dctQt.getFinNm())) {
				msgBuilder.append("��").append(i).append("����������������������");
			}
			if (StringUtil.emptyAndNull(dctQt.getFinType())) {
				msgBuilder.append("��").append(i).append("����������������������");
			}
			if (dctQt.getQtAmt() == null) {
				msgBuilder.append("��").append(i).append("������������������");
			}
		}
		if (msgBuilder.length() > 0) {
			msg = msgBuilder.toString();
		}
		return msg;
	}
}
